萬般皆是臉
註:在接下來的內容裡,我會著重在"圖片"下的人臉辨識 (包含攝影機圖片串流處理),3D影像或其他非圖片類型的本人還未著墨,因此不會在這個系列內容中說明。
註2:本篇文章著重在接下來系列文的基礎知識,如果這些對你來說太簡單了,可以斟酌跳過 :)
以下面年輕時的卓別林照片來說:
reference: 維基百科 - 查理·卓别林
F12
打開開發者工具檢查)若用numpy array
的方式表示會長這樣 (numpy是Python中很常用的矩陣與數值函式庫,這裡可以先不管):
[[ 67 69 65 ... 60 58 60]
[ 63 62 67 ... 60 58 59]
[ 64 59 68 ... 54 54 55]
...
[210 211 209 ... 23 20 21]
[204 210 216 ... 19 15 16]
[209 203 213 ... 24 18 17]]
到目前為止我們知道:
因此,如果是一個彩色圖片:
為了要表示色彩空間,我們用大家所熟悉的三原色(RGB)來表示這張圖片的話:
圖片上半部依序由左至右為圖片僅紅色部分、圖片僅綠色部分、圖片僅藍色部分
那下半部的三張圖片呢?
還記得前面提到灰階圖片表示,數值範圍是從 [0, 255] 吧?
因此下半部三張圖可以想成把三原色(RGB)分別以灰階數值來表示
頭暈了嗎?
舉例說明:
以上的範例說明希望能讓你對"顏色以數值表示"有一些感覺。
當然,沒有很理解也不會影響接下來的主題就是。
最後,圖片的原始大小為510 x 706,而圖片是彩色的就表示要用三個510 x 706的矩陣來表示:510 x 706 x 3
用numpy
來查看圖片的"大小"的話:
numpy.shape(image)
> (706, 510, 3)
依序由左至右是:高為706、寬為510、通道(顏色)為3的圖片
在上面的彩色圖片中,如果在做人臉偵測(Face Detection)或是其他物件辨識時,通常會有類似下圖的過程:
其中:ROI (Region of Interest)
,指的是在準備做某個影像分析處理時 (這裡範例就是人臉辨識),後續會特別針對進行處理的區域,通常這個區域是矩形。
而因為目前圖片中ROI
只有一個,後續在進行人臉辨識分析,最終結果還是同樣的一個矩形範圍。這個最終人臉辨識結果通常會用Bounding Box(邊界框)
表示人臉辨識的範圍。
通常邊界框會有兩種表示方式:
左上X座標、左上Y座標、右下X座標、右下Y座標
左上X座標、左上Y座標、邊界框的寬、邊界框的高
再多說一點,由於邊界框一定會在原始圖片內某一個區塊,在做電腦視覺分析(甚至是其他機器學習)時,通常會為了方便進行分析而將邊界框的數值結果都用[0, 1]這個範圍表示。
那要如何做呢?
假設我們現在看上面範例圖片的x0位置,可以發現它大概就在整張圖片約左右正中心的位置;這時我們就可以把x0的數值標示成0.5
計算方式聰明的你應該也想到了:x0 / 圖片寬(image_width)
,然後再取整數 (座標通常都會用整數表示)
其他數值也是用類似的方式計算。
到目前為止這一些基礎知識應該足夠了,明天見!